/*
 * memory.c
 *
 *  Created on: 2019年5月8日
 *      Author: Administrator
 */

/**
 * C语言为内存的分配和管理提供了几个函数：
 * #include <stdlib.h>
 *
 * void *calloc(int num, int size);
 * 在内存中动态分配num个长度为size字节的连续空间，每一个字节都初始化为0、
 * void * 指向任意类型的指针，具体可以被强制类型转换为期望的类型。如果分配失败，返回null指针
 *
 * void *malloc(int num);
 * 在堆区分配一块指定大小的内存空间，内存不会被初始化，值不确定
 *
 * void *realloc(void *address, int newsize);
 * 重新分配内存，把内存扩展到newsize
 *
 * void free(void *address);
 * 释放address所指向的动态分配的内存空间
 *
 * 释放内存：
 * 当程序退出时，操作系统会自动释放所有分配给程序的内存，
 * 建议您在不需要内存时，应该调用free()释放内存
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void memory() {

	char name[100];
	char *description;

	strcpy(name, "ge yang");

	// 动态分配内存
//	description = (char *)malloc(200 * sizeof(char));
	description = (char *)calloc(200, sizeof(char));

	if (description == NULL) {
		fprintf(stderr, "Error - unable to allocate required memory \n");
	} else {
		strcpy(description, "this is description!");
	}

	printf("name: %s ,description: %s\n", name, description);

	// 释放内存
	free(description);
}

